Computer programs, that is, operations executed on a computing device, are used in many industries. One industry that relies heavily on computer programs is the electronic design automation (EDA) industry. In general, the EDA industry provides computer programs to electronic designers and manufactures to assist them in the design and manufacture of different electronic devices. For example, some EDA tools provide computer software that allows an engineer to optimize the design for an integrated circuit. Other software programs are provided that allow for the simulation of electronic designs. These simulation programs, referred to as a simulators, imitate the behavior of an electronic device based upon its design. Simulation is used to subject the design to various tests, so that errors and necessary corrections to the design can be made prior to dedicating the resources to manufacture the device.
The time and resources necessary to execute these EDA software programs increase, often exponentially, with the size of the electronic device. For example, a modern electronic circuit includes over a billion transistors. Software programs that simulate the behavior of a design of this magnitude require significant amounts of computing resources and time to execute. Accordingly, the programs are often optimized in an effort to reduce the time and resources needed.
To assist in this optimization, the software program is executed and various metrics, such as, for example, execution time per function, may be observed. Other metrics, such as, for example, memory usage per function, can also be observed. The observed metrics can then be used to determine where the software program should be improved to reduce the time and resources it needs to execute. The observation of the various metrics is generally referred to as profiling. In the field of EDA, profiling is especially important, as a reduction in resources and execution times translates into quicker design cycles and faster time to market for devices.
Various different techniques for profiling computer programs exist. For example, a timer can be used to record the time spent executing the functions within the software program. Subsequently, a profile could be built based on these recorded times. This technique commonly is referred to as “instrumented profiling.” Another type of profiling, referred to as “sampling,” periodically checks to see which function is being executed. A profile can then be built from the sampled responses. FIG. 4 shows a sample profile 401, which, as can be seen, lists the functions 403 and the percentage of time 405 spent executing each function 403.
Many tools and techniques exist for building a profile as described above. However, where the computer program includes interpreted portions. These techniques are unsuitable to build an accurate profile. More specifically, where the computer program includes functions 403 that interpret or execute other computer programs or functions written in a different computer programming language, conventional profiling techniques do not accurately report statistics of resource usage and execution time. As will be appreciated, the interpretive function, such as, for example, the function 403 (i.e. interpretive function 1) shown in FIG. 4, will be reported as consuming time or resources during profiling, as opposed to the actual functions being interpreted.